package reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Scanner;

public class ReflectDemo5 {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个类名:");

        //1实例化对象
        Class cls = Class.forName(sc.nextLine());
        Object o = cls.newInstance();
        //2调用方法
        //通过类对象获取Person的成员方法sayHello
        Method[] methods = cls.getMethods();
        for(Method m : methods){
            if(m.getModifiers() == Modifier.PUBLIC){
                System.out.println(m.getName());
            }
        }
        while(true){
            System.out.println("请输入一个方法名:");
            Method method = cls.getMethod(sc.nextLine());
            //Method的重要方法: invoke()用于执行该方法, 需要传入该方法所属的对象
            method.invoke(o);
        }
    }
}
